package com.zhl.study.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.drew.imaging.ImageMetadataReader;
import com.drew.imaging.ImageProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.Tag;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @author 浩殇
 * @create 2022/12/7--22:56--周三
 * Exif
 */
public class Exif {

    //主方法体，封装在Exif类中，通过service层调用
    public static JSONObject analysis(File file)throws Exception{
        //将图片传入自定义方法中
        return printImageTags( file);
    }
    private static JSONObject printImageTags(File file) throws ImageProcessingException, IOException {
        String lat = "";
        String log = "";
//      读取元数据
        Metadata metadata = ImageMetadataReader.readMetadata(file);
        for (Directory directory : metadata.getDirectories()) {
//            打印元数据内容
            for (Tag tag : directory.getTags()) {
                String tagName = tag.getTagName();  //标签名
                String desc = tag.getDescription(); //标签信息
//            System.out.println("["+tagName +"]"+ " : " + desc);//照片信息
                switch (tagName) {
                    //                    经度
                    case "GPS Longitude":
                        lat = pointToLatlong(desc);
//                  System.out.println("***********"+lat+"*************");
                        break;
                    //                        纬度
                    case "GPS Latitude":
                        log = pointToLatlong(desc);
//                  System.out.println("***********"+log+"*************");
                        break;
                    default:
                        break;
                }
            }
        }
        System.out.println("###########################################################################");
        String add = getAdd(log, lat);
        JSONObject jsonObject = JSON.parseObject(add);
        //controller层设计为传输JSONObject类，读者也可设计为传输地址字符串
        return jsonObject;
       /*
       输出地址
       String add = getAdd(log, lat);
        JSONObject jsonObject = JSON.parseObject(add);
        JSONObject object=jsonObject.getJSONObject("result");
        String adds = object.getString("formatted_address");
       */

    }

    /**
     * 经纬度格式  转换
     *
     * @param point 坐标点
     *
     * @return
     */
    public static String pointToLatlong(String point) {
        Double du = Double.parseDouble(point.substring(0, point.indexOf("°")).trim());
        Double fen = Double.parseDouble(point.substring(point.indexOf("°") + 1, point.indexOf("'")).trim());
        Double miao = Double.parseDouble(point.substring(point.indexOf("'") + 1, point.indexOf("\"")).trim());
        Double duStr = du + fen / 60 + miao / 60 / 60;
        return duStr.toString();
    }


    /**
     * @param log 经度
     *
     * @param lat 纬度
     *
     * @return
     */
    public static String getAdd(String log, String lat) {
        //采用百度地图的接口：
        String urlString = "http://api.map.baidu.com/geocoder?location="+log+","+lat+"&output=json";
        System.out.println(urlString);
        String res = "";
        try {
            /*
            URL定义:
            统一资源标识符（Uniform Resource Identifier ，URL）是采用一种特定语法标识一个资源的字符串。
            所标识的资源可能是服务器上的一个文件。Java的URL网络类可以让你通过URL去练级网络服务器并获取资源。
             */
//            创建新的url
            URL url = new URL(urlString);
//             调用URL对象的openConnection( )来获取HttpURLConnection对象实例：
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

//            可以使用conn.getOutputStream().write()
            conn.setDoOutput(true);

//            设置HTTP请求使用的方法:GET(不安全) 或者POST，PUT等，HttpURLConnection默认是进行Get请求的：
            conn.setRequestMethod("GET");
//              调用getInputStream()方法获得服务器返回的输入流，然后输入流进行读取
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));

            String line;
//            解析获得的数据
            while ((line = in.readLine()) != null) {
                res += line + "\n";
            }
            in.close();
        } catch (Exception e) {
            System.out.println("error in wapaction,and e is " + e.getMessage());
        }
        return res;
    }
}
